<?php
header('Content-Type: application/json; charset=utf-8');

// 引入数据库配置
$dbConfig = include('db_config.php');

// 创建数据库连接
try {
    $dsn = "mysql:host=" . $dbConfig['host'] . ";dbname=" . $dbConfig['dbname'] . ";charset=" . $dbConfig['charset'];
    $pdo = new PDO($dsn, $dbConfig['username'], $dbConfig['password']);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // 检查请求方法是否为 POST
    if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
        throw new Exception('只支持 POST 方法');
    }

    // 获取用户 ID（假设通过身份验证获取，例如从 JWT 或会话中获取）
    $user_id = $_POST['user_id'];
    if (empty($user_id)) {
        throw new Exception('用户 ID 不能为空');
    }

    // 获取上传的文件
    $file = $_FILES['file'];
    if (!isset($file) || $file['error'] !== UPLOAD_ERR_OK) {
        throw new Exception('文件上传失败');
    }

    // 获取文件信息
    $file_name = basename($file['name']);
    $file_size = $file['size'];
    $file_type = mime_content_type($file['tmp_name']);
    $file_title = $_POST['file_title'] ?? $file_name; // 默认使用文件名作为标题
    $file_intro = $_POST['file_intro'] ?? ''; // 文件介绍，可选
    $file_cover = $_POST['file_cover'] ?? ''; // 文件封面，可选
    $file_icon = $_POST['file_icon'] ?? ''; // 文件图标，可选
    $file_remark = $_POST['file_remark'] ?? ''; // 文件备注，可选
    $upload_time = date('Y-m-d H:i:s'); // 获取当前时间作为上传时间
    $likes = '0'; // 初始化获赞数量为 0
    $review_status = '假'; // 初始化审核状态为未审核
    $reviewer_id = ''; // 初始化审核者 ID 为空
    $rejection_reason = ''; // 初始化拒绝原因为空

    // 移动上传的文件到指定目录
    $target_dir = 'uploads/';
    if (!is_dir($target_dir)) {
        mkdir($target_dir, 0777, true);
    }
    $target_file = $target_dir . basename($file_name);
    if (!move_uploaded_file($file['tmp_name'], $target_file)) {
        throw new Exception('文件移动失败');
    }

    // 插入文件信息到数据库
    $insertFile = "
        INSERT INTO mi_file (
            上传者用户的id,
            文件标题,
            文件介绍,
            文件大小,
            文件格式,
            获赞数量,
            文件链接,
            文件封面,
            文件图标,
            文件备注,
            上传时间,
            是否已审核,
            审核者的用户id,
            拒绝原因
        ) VALUES (
            :user_id,
            :file_title,
            :file_intro,
            :file_size,
            :file_type,
            :likes,
            :file_link,
            :file_cover,
            :file_icon,
            :file_remark,
            :upload_time,
            :review_status,
            :reviewer_id,
            :rejection_reason
        )
    ";

    $file_link = $target_file; // 使用服务器上的文件路径作为文件链接

    $stmt = $pdo->prepare($insertFile);
    $stmt->bindParam(':user_id', $user_id, PDO::PARAM_STR);
    $stmt->bindParam(':file_title', $file_title, PDO::PARAM_STR);
    $stmt->bindParam(':file_intro', $file_intro, PDO::PARAM_STR);
    $stmt->bindParam(':file_size', $file_size, PDO::PARAM_STR);
    $stmt->bindParam(':file_type', $file_type, PDO::PARAM_STR);
    $stmt->bindParam(':likes', $likes, PDO::PARAM_STR);
    $stmt->bindParam(':file_link', $file_link, PDO::PARAM_STR);
    $stmt->bindParam(':file_cover', $file_cover, PDO::PARAM_STR);
    $stmt->bindParam(':file_icon', $file_icon, PDO::PARAM_STR);
    $stmt->bindParam(':file_remark', $file_remark, PDO::PARAM_STR);
    $stmt->bindParam(':upload_time', $upload_time, PDO::PARAM_STR);
    $stmt->bindParam(':review_status', $review_status, PDO::PARAM_STR);
    $stmt->bindParam(':reviewer_id', $reviewer_id, PDO::PARAM_STR);
    $stmt->bindParam(':rejection_reason', $rejection_reason, PDO::PARAM_STR);
    $stmt->execute();

    // 获取插入的文件 ID
    $file_id = $pdo->lastInsertId();

    // 返回成功结果
    $result = [
        'status' => 'success',
        'message' => '文件上传并添加信息成功',
        'data' => [
            'id' => $file_id,
            'file_title' => $file_title,
            'file_link' => $file_link,
            'upload_time' => $upload_time
        ]
    ];
    echo json_encode($result, JSON_UNESCAPED_UNICODE);

} catch (Exception $e) {
    // 捕获异常并返回错误信息
    $errorResult = [
        'status' => 'error',
        'message' => '文件上传并添加信息失败：' . $e->getMessage()
    ];
    echo json_encode($errorResult, JSON_UNESCAPED_UNICODE);
}
?>